#include "key.h"


 	    
//按键初始化函数 
//设置成输入
void KEY_Init(void)
{
	
//	GPIO_InitTypeDef GPIO_InitStructure;

// 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使PORTC时钟

////	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag，使能SWD，可以用SWD模式调试
//	
//	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;//PC6
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
// 	GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA15
//	
//	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_7;//PC7
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
// 	GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5
// 
////	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PA0
////	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入，默认下拉	  
////	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0
	
} 
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值：

//注意此函数有响应优先级,KEY1>KEY2>KEY3>KEY4
// 默认所有按键未按下时均为高电平，按下为低电平
unsigned char KEY_Scan(unsigned char mode)
{	 
	static unsigned char key_up = 1; // 按键松开标志
	if (mode) key_up = 1;  // 支持连按

	// 检测有无按键按下（低电平为按下）
	if (key_up && (KEY1 == 0 || KEY2 == 0 || KEY3 == 0 || KEY4 == 0))
	{
		HAL_Delay(10); // 去抖动
		key_up = 0;
		// 再次判断，优先级：KEY1>KEY2>KEY3>KEY4
		if (KEY1 == 0) return KEY1_PRES;
		else if (KEY2 == 0) return KEY2_PRES;
		else if (KEY3 == 0) return KEY3_PRES;
		else if (KEY4 == 0) return KEY4_PRES;
	}
	// 所有按键都松开（高电平），允许再次检测
	else if (KEY1 == 1 && KEY2 == 1 && KEY3 == 1 && KEY4 == 1)
		key_up = 1;

	return 0; // 无按键按下
}
